﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vector>
#include<queue>


using namespace std;


//class Person
//{
//public:
//	virtual void BuyTicket() 
//	{ 
//		cout << "买票-全价" << endl; 
//	}
//};
//
//class Student :public Person
//{
//public:
//	virtual void BuyTicket()
//	{
//		cout << "买票-半价" << endl;
//	}
//};
//
//class Soldier :public Person
//{
//public:
//	virtual void BuyTicket()
//	{
//		cout << "提前买票" << endl;
//	}
//};
//
//void Func(Person& p)
//{
//	p.BuyTicket();
//}
//
//
//int main()
//{
//	Person p;
//	Student st;
//	Soldier so;
//
//	Func(p);
//	Func(st);
//	Func(so);
//	return 0;
//}

//class A
//{};
//class B : public A
//{};
//
//class Person {
//public:
//	virtual A* f()
//	{
//		return new A;
//	}
//};
//class Student : public Person {
//public:
//	virtual B* f()
//	{
//		return new B;
//	}
//};


//class Person 
//{
//public:
//	 virtual ~Person() 
//	{ 
//		cout << "~Person()" << endl; 
//	}
//};
//
//class Student : public Person 
//{
//public:
//	virtual ~Student() 
//	{ 
//		cout << "~Student()" << endl; 
//	}
//};


//int main()
//{
//	Person* p1 = new Person;
//	Person* p2 = new Student;
//	delete p1;
//	delete p2;
//	return 0;
//}


//class Car
//{
//public:
//	virtual void Drive() final {}
//};
//
//class Benz :public Car
//{
//public:
//	virtual void Drive() { cout << "Benz-舒适" << endl; }
//};

//class Car {
//public:
//	virtual void Drive()
//	{}
//};
//
//class Benz :public Car 
//{
//public:
//	virtual void Drive() override 
//	{ 
//		cout << "Benz-舒适" << endl; 
//	}
//};


//class A
//{
//public:
//	virtual void Person() = 0;
//};
//
//class B :public A
//{
//public:
//	virtual void Person()
//	{
//		cout << "这是Person类的重写" << endl;
//	}
//};
//
//main()
//{
//	//A a;
//	B a;
//}

//class Base
//{
//public:
//	virtual void Func1()
//	{
//		cout << "Func1()" << endl;
//	}
//
//	virtual void Func2()
//	{
//		cout << "Func2()" << endl;
//	}
//
//	void Func3()
//	{
//		cout << "Base::Func3()" << endl;
//	}
//
//private:
//	int _b = 1;
//};
//
//class Derive : public Base
//{
//public:
//	virtual void Func1()
//	{
//		cout << "Derive::Func1()" << endl;
//	}
//private:
//	int _d = 2;
//};
//
//int main()
//{
//	Base b;
//	Derive d;
//
//	return 0;
//}

//class Person 
//{
//public:
//	virtual void BuyTicket() 
//	{ 
//		cout << "买票-全价" << endl; 
//	}
//};
//
//class Student : public Person 
//{
//public:
//	virtual void BuyTicket() 
//	{ 
//		cout << "买票-半价" << endl; 
//	}
//};
//
//
//void Func(Person& p)
//{
//	p.BuyTicket();
//}
//
//int main()
//{
//	Person Mike;
//	Func(Mike); 
//	Student Johnson;
//	Func(Johnson);
//	return 0;
//}
